package cn.dev33.satoken.context.dubbo.filter;

import cn.dev33.satoken.same.SaSameUtil;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.*;

/**
 * Sa-Token 整合 Dubbo Consumer端过滤器（客户端、消费端）
 * <p>
 * 此过滤器为覆盖 Sa-Token 包内过滤器
 *
 * @author zhang peng
 */
@Activate(group = {CommonConstants.CONSUMER}, order = Integer.MIN_VALUE)
public class DubboConsumerFilter implements Filter {

    @Override
    public Result invoke (Invoker<?> invoker, Invocation invocation) throws RpcException {
        // 追加 Same-Token 参数
        RpcContext.getContext().setAttachment(SaSameUtil.SAME_TOKEN, SaSameUtil.getToken());

        // 如果有其他自定义附加数据，如租户
        // RpcContext.getContext().setAttachment("tenantContext", tenantContext);

        // 开始调用
        return invoker.invoke(invocation);
    }

}
